return {
	'neovim/nvim-lspconfig',
	event = 'FileType',
	config = function()
		local capabilities = vim.lsp.protocol.make_client_capabilities()
		capabilities.textDocument.completion.completionItem.snippetSupport = true

		local configurations = {
			ccls = {},

			cssls = {
				capabilities = capabilities,
			},

			html = {
				capabilities = capabilities,
			},

			lua_ls = {
				on_init = function(client)
					local path = client.workspace_folders[1].name
					if vim.uv.fs_stat(path .. '/.luarc.json') or vim.uv.fs_stat(path .. '/.luarc.jsonc') then
						return
					end

					client.config.settings.Lua = vim.tbl_deep_extend('force', client.config.settings.Lua, {
						runtime = { version = 'LuaJIT' },
						workspace = {
							checkThirdParty = false,
							library = { vim.env.VIMRUNTIME },
						},
					})
				end,
				settings = { Lua = {} },
			},

			jsonls = {
				capabilities = capabilities,
			},

			julials = {},

			nixd = {
				settings = {
					formatting = {
						command = { 'nixfmt' },
					},
				},
			},

			pylsp = {},

			rust_analyzer = {},

			tinymist = {
				settings = {
					formatterMode = 'typstyle',
					formatterPrintWidth = 80,
				},
			},

			ts_ls = {},
		}

		for name, cfg in pairs(configurations) do
			vim.lsp.config(name, cfg)
			vim.lsp.enable(name)
		end
	end,
}
